'''
Author: wangyingjie 2778809626@qq.com
Date: 2025-07-03 15:35:52
LastEditors: wangyingjie 2778809626@qq.com
LastEditTime: 2025-07-18 08:36:20
FilePath: /two_wheeled_car/src/bot_gazebo/launch/spawn_description.launch.py
Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
'''
#!/usr/bin/python3

import random
from launch_ros.actions import Node
from launch import LaunchDescription

#  该函数用于在ROS 2中生成一个启动描述，其功能如下：
# 1. 设置机器人初始位置和姿态
# 2. 构造唯一的机器人实体名称
# 3. 调用`spawn_entity.py`脚本在Gazebo中生成机器人模型
# 4. 返回包含该节点的LaunchDescription对象以供ROS 2启动系统使用

def generate_launch_description():

    # 定义机器人的初始位置
    position = [0.0, 0.0, 0.2]
    # 定义机器人的初始方向 -R, -P, -Y	设置机器人初始姿态，分别对应滚转（Roll）、俯仰（Pitch）、偏航（Yaw）角度
    orientation = [0.0, 0.0, 0.0]
    # 定义机器人的基础名称
    robot_base_name = "my_bot"

    # 生成一个唯一的实体名称，以避免多个机器人之间的冲突
    entity_name = robot_base_name+"-"+str(int(random.random()*100000))
    print("Spawning robot with name: ", entity_name)

    # 创建一个节点，用于在Gazebo中生成机器人实体
    # spawn_entity.py 是 ROS2 提供的一个标准脚本，用于将 URDF/XACRO 等格式的机器人模型加载到 Gazebo 中。
    spawn_robot = Node(
        package='gazebo_ros',
        executable='spawn_entity.py', # spawn_entity.py 是ROS2中gazebo_ros功能包提供的一个标准脚本，用于在 Gazebo 模拟环境中生成机器人模型
        name='spawn_entity',
        output='screen',
        arguments=['-entity',
                   entity_name,
                   '-x', str(position[0]), '-y', str(position[1]), '-z', str(position[2]),
                   '-R', str(orientation[0]), '-P', str(orientation[1]), '-Y', str(orientation[2]),
                   '-topic', '/robot_description'
                   ]
    )
    # -topic	指定从哪个话题获取机器人模型描述 /robot_description 这个是 自定义机器人模型描述话题

    # 返回一个LaunchDescription对象，包含生成机器人的节点
    return LaunchDescription(
        [
            spawn_robot,
        ]
    )
